package com.run2code.design.creational.singleton;

/**
 * 单例模式 - 懒汉式
 * 关注公众号【奔跑的码畜】，一起进步不迷路
 *
 * @author 第七人格
 * @date 2023/11/14
 */
public class Singleton_03 {

    /**
     * 实现要点①：项目启动时不创建这个类的实例
     */
    private static Singleton_03 INSTANCE;

    /**
     * 实现要点②：私有化构造函数，防止被外部实例化
     */
    private Singleton_03() {
    }

    /**
     * 实现要点③：对外提供获取实例的静态方法，并且方法上加锁 - synchronized - 保证线程安全
     *
     * @return {@link Singleton_03}
     */
    public static synchronized Singleton_03 getInstance() {
        // 实现点④：在使用时，才延迟加载这个类，这也是懒汉式名字的由来
        return null != INSTANCE ? INSTANCE : new Singleton_03();
    }

}
